package leetcode.tree_problem;

/**
 * 606. 根据二叉树创建字符串
 * https://leetcode-cn.com/problems/construct-string-from-binary-tree/
 */
public class 根据二叉树创建字符串 {
    private StringBuffer str = new StringBuffer();//在原字符串进行处理
    public String tree2str(TreeNode root) {
        //1.边界判空
        if (root == null){
            return "";
        }
        //2.此时根不空先把根值放进去再分别处理左右子树
        str.append(root.val);
        //3.处理左子树，把左子树加进去
        if (root.left != null){
            str.append("(");
            //此时千万注意取值是递归处理左右左子树的值不能只是添加一个不然只有根的
            //注意语义，方法是求得树root的字数串输出我们只要递归树的每一个子树就可以求得题目需求
            tree2str(root.left);
            str.append(")");
        }else {
            //注意这个else是处理左空时要不要给他加括号占位置的情况，处理对象依然是左子树
            if (root.right != null){
                str.append("()");
            }
        }
        //4.左子树处理完了，处理右子树，递归关系所以会先走到最左，依次向上处理每个节点
        if (root.right != null){
            str.append("(");
            tree2str(root.right);
            str.append(")");
        }
        //5.输出返回这个处理后的字符串注意是字符串，字符串
        return str.toString();
    }
}
